home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / bladestl.c < prev    next >
C/C++ Source or Header  |  1999-12-29  |  3KB  |  97 lines

  1. #include "driver.h"
  2. #include "vidhrdw/generic.h"
  3. #include "vidhrdw/konamiic.h"
  4.  
  5. static int layer_colorbase[2];
  6. extern int bladestl_spritebank;
  7.  
  8. void bladestl_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom)
  9. {
  10.     int i;
  11.     #define TOTAL_COLORS(gfxn) (Machine->gfx[gfxn]->total_colors * Machine->gfx[gfxn]->color_granularity)
  12.     #define COLOR(gfxn,offs) (colortable[Machine->drv->gfxdecodeinfo[gfxn].color_codes_start + offs])
  13.  
  14.     /* build the lookup table for sprites. Palette is dynamic. */
  15.     for (i = 0;i < TOTAL_COLORS(1);i++)
  16.         COLOR(1,i) = 0x20 + (*(color_prom++) & 0x0f);
  17. }
  18.  
  19. /***************************************************************************
  20.  
  21.   Callback for the K007342
  22.  
  23. ***************************************************************************/
  24.  
  25. static void tile_callback(int layer, int bank, int *code, int *color)
  26. {
  27.     *code |= ((*color & 0x0f) << 8) | ((*color & 0x40) << 6);
  28.     *color = layer_colorbase[layer];
  29. }
  30.  
  31. /***************************************************************************
  32.  
  33.   Callback for the K007420
  34.  
  35. ***************************************************************************/
  36.  
  37. static void sprite_callback(int *code,int *color)
  38. {
  39.     *code |= ((*color & 0xc0) << 2) + bladestl_spritebank;
  40.     *code = (*code << 2) | ((*color & 0x30) >> 4);
  41.     *color = 0 + (*color & 0x0f);
  42. }
  43.  
  44.  
  45. /***************************************************************************
  46.  
  47.     Start the video hardware emulation.
  48.  
  49. ***************************************************************************/
  50.  
  51. int bladestl_vh_start(void)
  52. {
  53.     layer_colorbase[0] = 0;
  54.     layer_colorbase[1] = 1;
  55.  
  56.     if (K007342_vh_start(0,tile_callback))
  57.     {
  58.         return 1;
  59.     }
  60.  
  61.     if (K007420_vh_start(1,sprite_callback))
  62.     {
  63.         K007420_vh_stop();
  64.         return 1;
  65.     }
  66.  
  67.     return 0;
  68. }
  69.  
  70. void bladestl_vh_stop(void)
  71. {
  72.     K007342_vh_stop();
  73.     K007420_vh_stop();
  74. }
  75.  
  76. /***************************************************************************
  77.  
  78.   Screen Refresh
  79.  
  80. ***************************************************************************/
  81.  
  82. void bladestl_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  83. {
  84.     K007342_tilemap_update();
  85.  
  86.     if (palette_recalc())
  87.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  88.  
  89.     tilemap_render( ALL_TILEMAPS );
  90.  
  91.     K007342_tilemap_draw( bitmap, 1, TILEMAP_IGNORE_TRANSPARENCY );
  92.     K007420_sprites_draw( bitmap );
  93.     K007342_tilemap_draw( bitmap, 1, 1 | TILEMAP_IGNORE_TRANSPARENCY );
  94.     K007342_tilemap_draw( bitmap, 0, 0 );
  95.     K007342_tilemap_draw( bitmap, 0, 1 );
  96. }
  97.